import axios from "axios";
import { Message } from "tdesign-mobile-vue";
import { Toast } from "tdesign-mobile-vue";
import { useCookies } from "vue3-cookies";

const { cookies } = useCookies();

// 1. 创建axios实例
const service = axios.create({
  baseURL:
    process.env.NODE_ENV === "production"
      ? "http://8.137.164.178:8183/sqx_fast"
      : "/api",
  timeout: 10000,
  headers: {
    "Content-Type": "multipart/form-data",
  },
});

// 2. 请求拦截器（之前的逻辑保留）
service.interceptors.request.use(
  (config) => {
    // 你的拦截器逻辑（如token）
    let token = cookies.get("token");
    if (token) config.headers["token"] = token;
    return config;
  },
  (error) => {
    // Message.error('请求错误');
    Toast({
      duration: 2000,
      message: "请求错误",
    });
    return Promise.reject(error);
  }
);

// 3. 响应拦截器（之前的逻辑保留）
// service.interceptors.response.use(
// 	(response) => {
// 		// 你的响应处理逻辑
// 		return response.data;
// 	},
// 	(error) => {
// 		// Message.error('响应错误');
// 		Toast({
// 		    duration: 2000,
// 		    message: '响应错误',
// 		});
// 		return Promise.reject(error);
// 	}
// );
service.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    // 1. 区分错误类型：网络错误 / 服务器错误 / 客户端错误
    let errorMsg = "请求失败，请稍后重试";

    if (error.response) {
      // 有响应体：根据状态码判断
      const { status, data } = error.response;
      switch (status) {
        case 500:
          // 服务器内部错误（可能返回具体信息）
          errorMsg = data?.message || "服务器内部错误，请稍后重试";
          break;
        case 400:
          // 客户端参数错误
          errorMsg = data?.message || "参数错误，请检查请求";
          break;
        case 401:
          // 未授权（token过期/无效）
          errorMsg = "登录已过期，请重新登录";
          // 可在此处添加跳转到登录页的逻辑
          // router.push('/login');
          break;
        case 403:
          // 权限不足
          errorMsg = "没有权限访问该资源";
          break;
        case 404:
          // 接口不存在
          errorMsg = "请求的资源不存在";
          break;
        case 408:
          // 请求超时
          errorMsg = "请求超时，请稍后重试";
          break;
        default:
          // 其他状态码（如502、503等）
          errorMsg = `服务器错误(${status})，请稍后重试`;
      }
    } else if (error.request) {
      // 无响应体：网络错误（如断网、超时未收到响应）
      errorMsg = "网络连接失败，请检查网络";
    } else {
      // 请求配置错误（极少出现）
      errorMsg = "请求配置错误";
    }

    // 显示错误提示
    Toast({
      duration: 3000, // 错误提示显示时间稍长一点
      message: errorMsg,
    });

    return Promise.reject(error);
  }
);

// 4. 定义 request 对象（关键：必须支持 request({...}) 调用）
const request = (options) => {
  return service(options); // 直接调用 service 实例，传入配置
};

// 可选：同时支持 request.get/request.post 写法（兼容之前的封装）
request.get = (url, params, config) => {
  return service({
    url,
    method: "get",
    params,
    ...config,
  });
};
request.post = (url, data, config) => {
  return service({
    url,
    method: "post",
    data,
    ...config,
  });
};

// 5. 必须导出 request（关键中的关键）
export default request;
